package pe.com.hermes.hermetic.web.controller.general;

import pe.com.hermes.hermetic.beans.PuntoBean;
import pe.com.hermes.hermetic.beans.SucursalBean;
import pe.com.hermes.hermetic.negocio.service.HermeticFacade;
import pe.com.hermes.hermetic.negocio.ultil.Util;
import pe.com.hermes.hermetic.web.controller.base.IController;

import pe.com.hermes.hermetic.web.forms.SelecPuntoForm;

import pe.com.hermes.hermetic.web.forms.SelecSucursalForm;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.SessionAttributes;

@Controller
@RequestMapping("/selecSucursal.html")
@SessionAttributes(value={"listSucursales"})
public class SeleccionarSucursalController implements IController {
    
    protected final static Logger logger = Logger.getLogger(SeleccionarPuntoController.class);
    @Autowired
    private HermeticFacade servicioHermetic;
    @RequestMapping(method={RequestMethod.GET})    
    protected String showForm(ModelMap model,HttpServletRequest request)throws Exception{
        try {
            logger.info(this.getClass().toString()+" "+"metodo: GET SELECCIONAR SUCURSAL");
            SelecSucursalForm form = new SelecSucursalForm();            
            String vCliente = (String)request.getParameter("v_cliente"); 
          String cliente = (String)request.getSession().getAttribute("cliente");
          String flag = (String)request.getParameter("flag");
          
            
          //logger.info("CODCLIENTE: "+);
            if(vCliente.equals("1")){//ALGUNOS
          
              String listCodClies="";
              String[] codClies=(String[])request.getSession(false).getAttribute("chksClieCorp");
              if(codClies!=null){
                  logger.info("");
                  Integer cont=0;
                  for(int i=0;i<codClies.length;i++){
                      if(codClies[i]!=null){
                          if(cont==0){
                            listCodClies=codClies[i];
                          }if (cont>0){
                            listCodClies=listCodClies+","+codClies[i];
                          }
                          cont++;
                      }
                  }
              }
              
              
              
              if (flag.equals("true")){
                listCodClies=cliente;
                request.getSession(false).setAttribute("chksSucu",null);
              }
              if (flag.equals("false")){
                listCodClies=cliente;
              }
              
              logger.info("lista de cliente corporacion : "+listCodClies);
              form.setListCodClientes(listCodClies);
            }
            else//TODOS
              form.setListCodClientes((String)request.getSession(false).getAttribute("listClie"));
            
            //List listSucursales = servicioHermetic.getListSucursales("%",form.getListCodClientes(),"0");
            
            List listSucursales = servicioHermetic.getListSucursalesCC("%",form.getListCodClientes());
            
            String[] chksSucu = (String[])request.getSession(false).getAttribute("chksSucu");
            listSucursales = Util.setChksSession(chksSucu, listSucursales);
            
            /*Si es que solo hay un check de Sucursal en -1 (TODOS), quitarlo*/
            if (chksSucu!=null && chksSucu.length>0 && chksSucu[0]!=null && chksSucu[0].equals("-1")){
                request.getSession(false).setAttribute("chksSucu",null);
            }
            
            form.setVCliente(vCliente);
            form.setListSucursal(listSucursales);
            request.getSession(false).setAttribute("listSucursales",listSucursales);
            form.setTipo("clie_agen");
            model.put("listSucursales",listSucursales);
            model.put(FORM_KEY,form);
            return FORM_SELEC_SUCURSAL;
        }
        catch (Exception e) {
            logger.error(e);
            return FORM_ERROR_POPUP_VIEW;
        }
    }

  @RequestMapping(params={"accion=selecSucursalCC"})   
  protected String selecSucursalCC(ModelMap model,HttpServletRequest request)throws Exception{
      logger.info("metodo : selecSucursalCC");
      try {
          logger.info(this.getClass().toString()+" "+"metodo: GET");
          SelecSucursalForm form = new SelecSucursalForm();            
          String codClie = (String)request.getSession(false).getAttribute("cliente");            
          List listSucursales = servicioHermetic.getListSucursalesCC("%",codClie);
          
          String[] chksSucu = (String[])request.getSession(false).getAttribute("chksSucu");
          listSucursales = Util.setChksSession(chksSucu, listSucursales);                
          
          /*Si es que solo hay un check de Sucursal en -1 (TODOS), quitarlo*/
          if (chksSucu!=null && chksSucu.length>0 && chksSucu[0]!=null && chksSucu[0].equals("-1")){
              request.getSession(false).setAttribute("chksSucu",null);
          }
          
          
          form.setListSucursal(listSucursales);
          form.setTipo("resp_equi");
          request.getSession(false).setAttribute("listSucursales",listSucursales);
          model.put("listSucursales",listSucursales);
          model.put(FORM_KEY,form);
          return FORM_SELEC_SUCURSAL;
      }
      catch (Exception e) {
          logger.error(e);
          return FORM_ERROR_POPUP_VIEW;
      }
  }
  
  @RequestMapping(params={"accion=buscarSucursalRequi","desSucu"}) 
  protected String buscarSucursalRequi(@RequestParam("desSucu") String desSucu ,ModelMap model,HttpServletRequest request)throws Exception{
      logger.info(this.getClass().toString()+" "+"metodo: GET");
      SelecSucursalForm form = new SelecSucursalForm();
      String cliente=(String)request.getSession(false).getAttribute("cliente");
      
      String[] chksSucu = (String[])request.getSession(false).getAttribute("chksSucu");
      
      List listSucursales = new ArrayList();        
      
      listSucursales = servicioHermetic.getListSucursalesCC(desSucu,cliente);
      listSucursales = Util.setChksSession(chksSucu,listSucursales);
      form.setListSucursal(listSucursales);
      if(desSucu.equals(""))
          request.getSession(false).setAttribute("listSucursales",listSucursales);
      //model.put("listSucursales",listSucursales);
      form.setTipo("resp_equi");
      model.put("listSucursales",listSucursales);
      model.put(FORM_KEY,form);
      return FORM_SELEC_SUCURSAL;
  }
  
    
    @RequestMapping(params={"accion=buscarSucursal","desSucu"}) 
    protected String buscarSucursal(@RequestParam("desSucu") String desSucu ,ModelMap model,HttpServletRequest request)throws Exception{
        logger.info(this.getClass().toString()+" "+"metodo: GET");
        SelecSucursalForm form = new SelecSucursalForm();
        
        String vCliente = (String)request.getParameter("v_cliente");   
        
        if(vCliente.equals("1"))
        {
          String listCodClies="";
          String[] codClies=(String[])request.getSession(false).getAttribute("chksClieCorp");
          for(int i=0;i<codClies.length;i++)
          {
              if(i==0)
                  listCodClies=codClies[i];
              else
                  listCodClies=listCodClies+","+codClies[i];
          }
          form.setListCodClientes(listCodClies);
        }
        else
          form.setListCodClientes((String)request.getSession(false).getAttribute("listClie"));
          
        
        String[] chksSucu = (String[])request.getSession(false).getAttribute("chksSucu");
        
        List listSucursales = new ArrayList();        
        
        listSucursales = servicioHermetic.getListSucursalesCC(desSucu,form.getListCodClientes());
        listSucursales = Util.setChksSession(chksSucu,listSucursales);
        form.setListSucursal(listSucursales);
        if(desSucu.equals(""))
            request.getSession(false).setAttribute("listSucursales",listSucursales);
        //model.put("listSucursales",listSucursales);
        form.setTipo("clie_agen");
        model.put("listSucursales",listSucursales);
        model.put(FORM_KEY,form);
        return FORM_SELEC_SUCURSAL;
    }
    
    @RequestMapping(params={"accion=searchDesSucursal"}) 
    protected @ResponseBody String[] searchDesSucursal(HttpServletRequest request)throws Exception{        
        logger.info(this.getClass().toString()+" "+"metodo: searchDesSucursal");        
        List listSucursal = (List)request.getSession(false).getAttribute("listSucursales");
        String[] arraySucursales = new String[listSucursal.size()];
        for(int i=0;i<listSucursal.size();i++){
            arraySucursales[i] = ((SucursalBean)listSucursal.get(i)).getDesSucursal();
        }
        return arraySucursales;
    }
    @RequestMapping(params={"accion=selectCodSucursal","codSucu"}) 
    protected @ResponseBody String[] selectCodSucursal(@RequestParam("codSucu") String codSucu,@ModelAttribute(FORM_KEY) SelecSucursalForm form,HttpServletRequest request)throws Exception{        
        logger.info(this.getClass().toString()+" "+"metodo: selectCodSucursal"); 
        
        String[] chksSucu = (String[])request.getSession(false).getAttribute("chksSucu");
        try{
          if(("").equals(codSucu))
              return chksSucu; 
          if(chksSucu!=null)
              for(int i=0;i<chksSucu.length;i++){                
                  if(chksSucu[i]!=null&&chksSucu[i].equals(codSucu)){
                      break;
                  }
                  if(chksSucu[i]==null){
                      chksSucu[i] = codSucu;
                      break;
                  }
              }            
          else{
              chksSucu= new String[1000];
              chksSucu[0]=codSucu;
          }
          request.getSession(false).setAttribute("chksSucu",chksSucu);        
        }catch(Exception e ){
            logger.error(e);
        }
        return chksSucu;
    }
    
    @RequestMapping(params={"accion=deselectCodSucu","codSucu"}) 
    protected @ResponseBody String[] deselectCodSucu(@RequestParam("codSucu") String codSucu,@ModelAttribute(FORM_KEY) SelecSucursalForm form,HttpServletRequest request)throws Exception{        
        logger.info("metodo : deselectCodSucu");
        logger.info(this.getClass().toString()+" "+"metodo: deselectCodSucu");        
        String[] chksSucu = (String[])request.getSession(false).getAttribute("chksSucu");

        if(chksSucu!=null && chksSucu.length > 0)
            for(int i=0;i<chksSucu.length;i++){                
                if(chksSucu[i]!=null && chksSucu[i].equals(codSucu)){
                    chksSucu[i] = null;
                    break;
                }
            }            
        
        request.getSession(false).setAttribute("chksSucu",chksSucu);        
        return chksSucu;
    }        
    
    
    @RequestMapping(params={"accion=selectTodos","codTodos"}) 
    protected String selectTodos(@RequestParam("codTodos") boolean codTodos ,ModelMap model,HttpServletRequest request)throws Exception{
        
        logger.info("metodo : selectTodos*********");
        //SelecSucursalForm form = (SelecSucursalForm)model.get("form");//new SelecCuentaForm();
        SelecSucursalForm form=new SelecSucursalForm();
        
        //Asigno el check a todos los elenmentos de la lista Cuenta        
        List listSucursales = (List)request.getSession(false).getAttribute("listSucursales");
        //List listSucursales = form.getListSucursal();
        
        listSucursales = Util.setChksTodos(codTodos, listSucursales);        
        form.setListSucursal(listSucursales);
        
        //Subo a session los todos los Checks Cuenta
        if (codTodos) {
            String[] chksSucu = Util.listToStringArray(listSucursales);
            request.getSession(false).setAttribute("chksSucu",chksSucu);       
        }else {
            request.getSession(false).setAttribute("chksSucu",null);        
        }   
        request.getSession(false).setAttribute("listSucursales",listSucursales);
        model.put("listSucursales",listSucursales);
        model.put(FORM_KEY,form);
        return FORM_SELEC_SUCURSAL;
    }
    
    
    @RequestMapping(params={"accion=cambiarSucursal","sucursal"}) 
    protected @ResponseBody String cambiarSucursal(@RequestParam("sucursal") String sucursal ,ModelMap model,HttpServletRequest request)throws Exception{
        String rpta="";
        //Si se marco en blanco
        if (sucursal!=null && sucursal.equals("0")){
            rpta="0";
        }
        //Si se marco en todos, guardar -1 en chksSucu en Sesion
        if (sucursal!=null && sucursal.equals("1")){
            String []chksSucu= new String[1000];
            chksSucu[0]="-1";
            request.getSession(false).setAttribute("chksSucu",chksSucu);
            rpta="1";
        }
        //Si se marco en algunos, verificar si existen checks marcados
        if (sucursal!=null && sucursal.equals("2")){
            String[] chksSucu=(String[])request.getSession(false).getAttribute("chksSucu");
            if (chksSucu!=null && chksSucu.length>0 ){
                boolean encontroTodos=false;
                int contador=0;
                for (int l=0;l<chksSucu.length;l++){
                    if (chksSucu[l]!=null){
                        contador++;
                        if (chksSucu[l].equals("-1")){
                            encontroTodos=true;
                        }
                    }
                }
                if ((encontroTodos && contador==1)||(contador==0)){
                    rpta="0";
                }
                
                else{
                    rpta="1";    
                }
               
            }
            else{
                rpta="0";
            }
        }
        //Reiniciar las bovedas seleccionadas
        request.getSession(false).setAttribute("chksCuenta",null); 
        return rpta;
    }
}
